package ru.geyes.screw.collections;

import ru.geyes.screw.closures.Function2V;
import ru.geyes.screw.closures.Function2P;
import ru.geyes.screw.closures.Function2B;
import ru.geyes.screw.closures.Function;

/**
 * @author alex
 *         date 17.05.2008
 *         time 22:10:59
 */
public interface MapXF<K, V> {
    public ListX<V> flatMap();
    public Option<V> getO(K key);
    public ListX<V> valuesX();
    public void forAll(Function2V<K, V> exec);
    public <S> MapX<K, S> map(Function2P<S, K, V> mapper);
    public MapX<K, V> filter(Function2B<K, V> filterF);
    public V getOrPut(K key, Function<V> closure);
    public V get(K key);
}
